package com.aaa.javaweb.dao.impl;

import com.aaa.javaweb.dao.OrderDao;
import com.aaa.javaweb.until.BaseDB;
import com.aaa.javaweb.until.JDBCUntil;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Repository
public class OrderDaoImpl implements OrderDao {
    @Override
    public List<Map> selxiangqing(Integer typeid) {
        String sql="select ty.id,ty.tname,ty.yj,ty.money,ts.name from t_type ty  left JOIN t_roomsheshi trs on ty.id=trs.typeid LEFT JOIN t_sheshi ts on trs.ssid=ts.id where trs.typeid=?";
        return JDBCUntil.selectMap(sql,typeid);
    }

    /**
     * 获取房间类型 ，押金，价格，甚至图片
     * @param typeid
     * @return
     */
    @Override
    public List<Map> rtype(Integer typeid) {
        String sql ="select * from t_type where id=?";
        return JDBCUntil.selectMap(sql,typeid);
    }

    @Override
    public List getMaxDate(Integer typeid) {
        String sql = "call pro_getmaxleaveDate("+typeid+",?)";
        return BaseDB.getCallOut(sql,"out");
    }

    @Override
    public void allNowandMaxtime(String format, String s) {
        String sql ="{call create_calendar('"+format+"','"+s+"')}";
        BaseDB.getCall(sql);
        //插入数据成功 根据插入的时间查询当前的时间
    }

    @Override
    public List<Map> selAlltime() {
        //查询clenda_custom表霹雳的所有时间返回List<Map>类型
        String sql ="select * from clenda_custom";
        return JDBCUntil.selectMap(sql);
    }

    @Override
    public Map getDateOrder(List<Map> selalltime, Integer typeid) {
        //房间未满的 时间和剩余的房间数
        List<Map> mapsDate = new ArrayList<>();
        //房间已满的日期
        List maxDate = new ArrayList<>();

        //获取该类型总的房间数
        String sql1 ="select count(*) a from t_room where typeid=?";
        List<Map> maps = JDBCUntil.selectMap(sql1, typeid);
        int count = Integer.parseInt(maps.get(0).get("a")+"");
        System.out.println(sql1);
        //遍历这个List<Map>数组里的所有时间段，一一拿出来判断
        for (Map map : selalltime) {
            //用这个方法来遍历所有时间段内这个房间类型再这一天内的剩余房间数量
            String sql = "{Call create_getroomcount('"+map.get("data")+"',"+typeid+",?)}";
            List<String> dateout = BaseDB.getCallOut(sql, "out");
            //这样就获取到了再这个时间里已满的房间数量
            int i = Integer.parseInt(dateout.get(0));
            //总数-已满房间数=剩余房间数
            int sycount = count - i;
            System.out.println(sycount);
            //然后判断如果剩余的数量大于0，那么我就让剩余房间数和时间发给存到map里
            if (sycount>0){




                Map hashMap = new HashMap();
                //已键值对类型存放再一个map里 key是这个日期 value是剩余房间数量
                hashMap.put(map.get("data"),sycount);
                //然后把这个map存放再List里
                mapsDate.add(hashMap);
            }else {
                //如果满的话就把这这些时间存放再maxDate这个数组中
                maxDate.add(map.get("data"));
            }
        }
        System.out.println(mapsDate);
        //把获取到的所有已满房的日期和拥有剩余房间数量的日期和房间数量都放到m里；
        Map m = new HashMap();
        m.put("mapsDate",mapsDate);
        m.put("maxDate",maxDate);


        return m;
    }

}
